/**
 * Proyecto X Tecnologia de programacion  2do cuatrimestre de 2012
 * @author
 * German Rickert LU: 93284
 * Maximiliano Tiberi LU: 83600
 * Sebastian Larrieu LU: 94056
 */

package entidades;

import java.awt.Point;

import logica.informe;

import grafica.RepresentacionGrafica;


public abstract class Capcom extends Entidad{
	
	//Atributos de Instancia
	protected int vida;
	protected int velocidad;
	protected int defensa;
	protected int puntaje;
	protected int poder;
	protected boolean accion;
	protected boolean atacando;
	protected boolean salta=false;
	protected Marvel enemigo;
	
	//Consultas
	/**
	 * 
	 * @return true si esta atacando
	 */
	public boolean getAtacando(){
		return atacando;
	}
	
	/**
	 * 
	 * @param a atacando
	 */
	public void setAtacando(boolean a){
		atacando= a;
	}
	
	/**
	 * recibe el enemigo a atacar
	 * @param m enemigo
	 */
	public void setEnemigo(Marvel m){
		enemigo= m;
	}
	
	/**
	 * @return Vida restante del capcom.
	 */
	public int getVida()
	{
		return vida;
	}
		
	/**
	 * @return Puntaje que otorga al ser destruido.
	 */
	public int getPuntaje()
	{
		return puntaje;
	}
		
	/**
	 * @return Velocidad de movimiento.
	 */
	public int getVelocidad()
	{
		return velocidad;
	}
	
	/**
	 * 
	 * @return true si debe ejecutar una accion
	 */
	public boolean getAccion()
		{
			return accion;
		}
		
	/**
	 * @return Representacion grafica del personaje.
	 */
	public RepresentacionGrafica getGrafica()
	{
		return super.getRepresentacion();
	}
	
	/**
	 * @return salta (salta o no personajes)
	 */
	public boolean salta()
	{
		return salta;
	}
		
	//Comandos
		
	/**
	 * @param poder de ataque recibido.
	 */		 
	 public synchronized void recibirAtaque(int d)
	 {	
		int aux= d-defensa;
		informe.mostrar("D:"+ d +" Defensa:" + defensa+" aux:" + aux + " Vida:" + vida);
		
		vida-= aux;
		informe.mostrar("Me atacaron(capcom)"+vida);
	 }
		 
	 /**
	 * @param velocidad de movimiento.
	 */
	 public void setVelocidad(int v)
	 {
		velocidad = v;
	 }
	

	
	 /**
	  * 
	  * @param b true si debo actuar
	  */
	 public void setAccion(boolean b)
	 {
		 accion=b;
	 }
	 
	 
		 
	 /**
	  * avanzar graficamente una posicion
	  */
	 public void avanzar()
	 {
		 	this.accion=false;
		 	this.getGrafica().setLocation(110*(this.getPosicion().getColumna()+1), 110*(this.getPosicion().getFila()));
		 	informe.mostrar("Estoy en la columna: "+ this.getPosicion().getColumna()+this.getClass());
			Point punto= grafica.getLocation();
			
			int x= (int)punto.getX();
			int aux= x-110;
			while(x>aux)
			{	
				x=x-this.velocidad;
				this.getGrafica().setLocation( x, this.getGrafica().getLocation().y );
				try {
					this.sleep(400);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}//while
			
		}

	 
	 /**
	 * @param atacar enemigo
	 */
		public void atacar()
		{
			
			if(enemigo.getVida() > 0){
				informe.mostrar("Vida enemigo "+ enemigo.getVida());
				this.getGrafica().setImagenAcutal(1);
				this.getGrafica().setLocation(110*(this.getPosicion().getColumna()-1), 110*(this.getPosicion().getFila()));
				enemigo.recibirAtaque(poder);
				try {
					this.sleep(velocidad*1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			else
				atacando= false;
								
		}

}
